//  引入表单验证库
import Schema from 'validate'

const roomInfo = new Schema(
  {
    // 楼栋
    building: {
      type: String, // 类型
      required: true, // 非空
      message: '楼栋不能为空', // 提示信息
    },
    // 房号
    room: {
      type: String, // 类型
      required: true, // 非空
      message: '房号不能为空', // 提示信息
    },
    // 姓名
    name: {
      type: String, // 类型
      match: /^[\u4e00-\u9fa5]{2,6}$/, // 中文正则
      message: '姓名中文 2-6位', // 提示信息
    },
    // 手机号码
    mobile: {
      type: String, // 类型
      match: /^1[3-9]\d{9}$/, // 手机号码
      message: '手机不合法', // 提示信息
    },
    // 身份证正面
    idcardFrontUrl: {
      type: String, // 类型
      required: true, // 非空
      message: '身份证正面不能为空', // 提示信息
    },
    // 身份证背面
    idcardBackUrl: {
      type: String, // 类型
      required: true, // 非空
      message: '身份证背面不能为空', // 提示信息
    },
  },
  { strip: false } // 解决 验证对象后，数据丢失属性的问题！！
)
Page({
  data: {
    // 接口文档中查看
    /** * 小区楼栋信息 */
    building: '',
    /** * 业主性别0女1男 */
    gender: 1,
    /** * 身份证背面 */
    idcardBackUrl: '',
    /** * 身份证正面 */
    idcardFrontUrl: '',
    /** * 业主电话 */
    mobile: '',
    /** * 业主姓名 */
    name: '',
    /** * 小区信息 */
    point: '',
    /** * 小区房间信息 */
    room: '',
  },
  // 解构数据
  async onLoad({ point, building, room, id }) {
    wx.setNavigationBarTitle({ title: '修改房屋信息' })
    if (id) {
      console.log("修改");
      const res = await wx.http({
        url: '/room/' + id
      })
      // console.log(res);
      const { status, ...data } = res.data
      console.log(status);
      this.setData(data)
      // console.log(data);

    } else {
      wx.setNavigationBarTitle({ title: '新增房屋信息' })
      console.log("新增");
      this.setData({
        point,
        building,
        room,
      })
    }

  },
  // 上传头像
  async onChooseMedia(ev) {
    // 微信官方文档的api，媒体里面的视频
    const res = await wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
    })
    console.log(res);
    // 获取临时文件路径
    const { tempFilePath } = res.tempFiles[0]
    // console.log(tempFilePath)
    // 把临时文件  上传到 服务器  上传文件 有单独的api ，不是使用 http 请求，
    wx.uploadFile({
      url: wx.http.baseURL + '/upload',
      // 文件临时路径
      filePath: tempFilePath,
      // 获取文件的key 给后端去获取
      name: 'file',
      // 请求头 token
      header: {
        Authorization: `Bearer ${getApp().token}`,
      },
      success: (res) => {
        // 将获取到的JOSN文件转换成对象
        const data = JSON.parse(res.data)
        // console.log(data)
        //自定义属性type 这里的type相当于做判断，看type里面的值是 "idcardFrontUrl" || "idcardBackUrl"
        const type = ev.mark.type
        // 这里使用了变量形式传参
        this.setData({
          [type]: data.data.url,
        })
      },
      fail: (err) => {
        console.log(err)
      },
    })
  },
  // 删除图片
  removePicture(ev) {
    // console.log(68, ev);
    const type = ev.mark.type
    // 这里使用了变量形式传参
    this.setData({
      [type]: "",
    })
  },
  // 提交审核
  async onsubmit() {
    // console.log(ev);
    /* 
    1 获取到所有的表单数据 
    2 表单的合法性验证 （validate.js 库）
      1 小区、楼栋、房间号、身份证正房间  非空即可 
      2 姓名 中文-[2-6]  手机号码-
    3 验证通过 调用接口 完成 新增房屋的功能！！ 
     */
    // 获取双向绑定的数据
    const { id, building, gender, idcardBackUrl, idcardFrontUrl, mobile, name, point, room } = this.data
    // 将解构的数据保存在对象中
    const pramas = { id, building, gender, idcardBackUrl, idcardFrontUrl, mobile, name, point, room }
    // 验证表单,使用npm里面的validate来验证的
    const errors = roomInfo.validate(pramas)

    if (errors.length) {
      wx.utils.toast(errors[0].message)
      return
    }
    // 对 params.id 做一个判断， 如果你等于 undefined 就删除掉 id属性
    if (pramas.id === undefined) {
      // 删除对象中的属性
      delete pramas.id
    }
    // console.log(pramas);
    // 调用接口发送数据
    // 显示成功提示
    // 成功后跳到房屋列表，使用一个定时器让客户体验更好
    const res = await wx.http({
      url: '/room',
      method: 'post',
      data: pramas,
    })
    console.log(res);
    // 判断是否成功 状态码 10000
    if (res.code !== 10000) {
      return wx.utils.toast(res.message)
    }
    wx.showToast({ title: "操作成功" })

    setTimeout(() => {
      wx.navigateTo({
        url: '/house_pkg/pages/list/index'
      })
    }, 1500)
  }
})
